LinuC-2 - 201試験 - 2.04:システムの保守と運用管理 - 2.04.1 makeによるソースコードからのビルドとインストール

Last Update : August 21 2022 17:47:18

     

a. gitでソースコードの管理

Gitとは、分散型バージョン管理システムの一つで、もともとLinuxのソースコードを効果的に管理するために開発されました。
Gitでは、ファイルの状態を好きなときに更新履歴として保存しておくことができます。そのため、一度編集したファイルを過去の状態に戻したり、編集箇所の差分を表示したりすることができます。
また、古いファイルを元に編集したファイルで、他人の編集した最新ファイルを上書きしようとすると、サーバにアップロードした時に警告が出ます。そのため、知らず知らずのうちに他人の編集内容を上書きしてしまうといった失敗は起こりません。

Gitを使用するために理解しておくべき基本的な用語について説明します。

【 リポジトリ 】
「ファイル/ディレクトリの状態を記録するもの」です。変更内容は変更履歴として保存されていきます。
変更履歴管理対象ディレクトリをリポジトリの管理下に配置すると、対象ディレクトリ内のファイル/ディレクトリの変更履歴を記録できます。

● リモートリポジトリ
専用サーバに配置される共有リポジトリです。マスターリポジトリとして複数人で共有します。

● ローカルリポジトリ
自分のローカルPCに作成する個人用リポジトリです。
「リモートリポジトリをコピーして作成」「新規作成」の2種類の作成方法があります。
「リモートリポジトリのコピー作成」のことを、「クローン作成」と呼びます。

【 ワークツリー 】
「ローカルPC内のGit管理下にある作業用ディレクトリ」のことです。
ユーザは、このディレクトリの中にあるファイルを編集します。

【 コミット 】
「編集したファイルの変更内容をローカルリポジトリに記録する」作業のことです。
コミットの際は、「コミットメッセージ」(コメント)の入力が必須です。

【 インデックス 】
「コミットされるファイルを登録しておくもの」です。概念的に、ローカルリポジトリとワークツリーの間にあります。
インデックスに登録してあるファイルのみコミットされます。

【 プッシュ(Push) 】
「ローカルリポジトリの内容をリモートリポジトリにアップロードする」ことです。

【 プル(Pull) 】
「リモートリポジトリの最新の状態をローカルリポジトリに取り込む」ことです。
他の編集者により、リモートリポジトリは更新されていきます。それらの更新情報をダウンロードして、ローカルリポジトリを最新の状態に更新します。

【 マージ 】
「1ファイルに対する複数の変更内容を統合する」作業です。
ファイル(A)をPullして、編集後、Pushした時に、すでに他の編集者がファイル(A)に対してPushしていた場合、マージ作業が必要です。
Gitが自動的に統合してくれます。自動的に統合できなかった場合は、手動での統合作業が必要です。


● Gitの使い方

ローカルPCにGitをインストールした後の基本的な使い方(流れ)について説明します。

  1. 「リモートリポジトリ」から「ローカルリポジトリ」を作成します。(クローン作成)
  2. 必要に応じて、「プル(Pull)」して、「リモートリポジトリ」の最新の状態を「ローカルリポジトリ」に反映させます。
  3. 「ローカルリポジトリ」の「ワークツリー」にてファイル編集を行います。
  4. 変更対象ファイルを「インデックス」に登録します。
  5. 「コミット」を行います。
  6. 「プッシュ(Push)」をして、「リモートリポジトリ」に変更内容をアップロードします。※競合した場合は、「マージ」を行います。

git clone, git tag -l, git checkout


b. アーカイブユーティリティ

gzip, gunzip, bzip2, xz, tar, unzip


c. パッチ

パッチ(patch)とは、ファイルを部分的に修正・更新するために用いられる追加分のデータ(差分ファイル)のことです。
古いファイルと差分ファイルを基に、新しいファイルを作成します。差分ファイルは「diff」コマンドを使って作成します。
差分ファイルを“パッチファイル”、差分を適用することを“パッチを当てる”と言います。


● patch コマンド構文
 patch [オプション] 元のファイル 差分ファイル
または、
 patch < 差分ファイル

オプションを省略してコマンドを実行するとパッチファイルの形式を自動判別します。オプション -c(context形式)、-e(edスクリプト形式)、-n(RCS形式)、-u(unified形式)を指定した場合、自動判別を行いません。


● 差分ファイルの作成(パッチファイル)
# diff -u file_old file_new > sabun_fail.patch

オプションの「-u」はパッチファイルを、unified diff形式で出力するという指定です。
「-c」の場合はcontext diff形式での出力になります。


● パッチの適用
# patch -u file_old < sabun_fail.patch

オプションの「-u」はパッチファイルを、unified diff形式のパッチを適用するという意味になります。(diffと同様に「-c」の場合はcontext diff形式での適用となります。)
「適用するファイル名」については省略することが出来ます。省略した場合はパッチファイルの先頭の行「--- ファイル名」のファイルにパッチが適用されます。

● パッチの適用をもとに戻す(リバースパッチ)

間違ってパッチを適用してしまった場合など、patchコマンドにオプション「-R」を指定することでパッチ適用を戻す(リバースパッチ)ことが出来ます。

# patch -u -R file_old < sabun_fail.patch


d. configure

ソースコードからアプリケーションをインストールするときには、ソースコードをコンパイルする必要があり、必ずconfigure、make、make installの順で実行します。
configureはコマンドではなく、スクリプトファイルです。configureは、ファイルに書かれているスクリプトを実行します。
ソースコード中にこのconfigureスクリプトファイルが含まれているので、configureファイルのあるディレクトリで実行します。
configureを実行することで、インストールに必要な環境変数やライブラリが正しく設定、設置されているか等がチェックされます。チェックした結果、MakeFileが作られます。
アプリケーションをインストールする環境はそれぞれ違うため、単一のMakeFileを準備するだけだと、環境の差異に対応するのが難しくなります。
configureを使えば、アプリがインストールされる環境を自動的に調べ、その環境に合わせたMakeFileが自動的に作られます。
多くの場合は「configure」という名前がついていますが、別の名前にすることも可能です。

● configureの実行
configureのディレクトリに移動して、

# ./configure


e. コンパイルとインストール

configureが成功し、makefileが作られたら、makeを実行します。
make コマンドでは、ソースコードをコンパイルし、ロードモジュールを作成します。
configureを実行したディレクトリで、makeを実行します。

● makeの実行
# make

makeが成功したら、ロードモジュールを適切なディレクトリに移動するため、make installを実行します。

# make install


z. 出題範囲概要

概要 :
  • ソースコードから実行プログラムをビルドしてインストールできる。これには、ソースファイルの展開も含まれる。

詳細 :
  • gitを使ってソースコードを入手する。
    git clone, git tag -l, git checkout
  • 一般的な圧縮およびアーカイブユーティリティを使用して、ソースコードを展開する。
    gzip, gunzip, bzip2, xz, tar, unzip
  • ソースコードにパッチを適用する。
    patch
  • configureスクリプトにパラメータを適用する。
    configure
  • プログラムをビルドするmakeの実行について基本を理解する。
    make, make install

  [ 例題 ] 


         

    www.it-shikaku.jp